using System;
using System.Windows.Forms;

namespace 新连接蓝牙音频设备音量调节器
{
    internal static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            // 设置全局异常处理
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.ThreadException += Application_ThreadException;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            try
            {
                // 检查系统版本和.NET运行时
                if (!CheckSystemRequirements())
                {
                    return;
                }

                // To customize application configuration such as set high DPI settings or default font,
                // see https://aka.ms/applicationconfiguration.
                ApplicationConfiguration.Initialize();
                
                // 检查是否是开机启动（通过命令行参数）
                bool isStartup = args.Length > 0 && args[0].Equals("/startup", StringComparison.OrdinalIgnoreCase);
                
                Application.Run(new Form1(isStartup));
            }
            catch (Exception ex)
            {
                HandleException(ex, "应用程序启动时发生错误");
            }
        }

        /// <summary>
        /// 处理UI线程未捕获的异常
        /// </summary>
        private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception, "UI线程中发生未处理的异常");
        }

        /// <summary>
        /// 处理非UI线程未捕获的异常
        /// </summary>
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException(e.ExceptionObject as Exception, "非UI线程中发生未处理的异常");
        }

        /// <summary>
        /// 统一异常处理方法
        /// </summary>
        private static void HandleException(Exception? ex, string context)
        {
            string errorMessage = $"{context}:\n\n{ex?.Message ?? "未知错误"}\n\n堆栈跟踪:\n{ex?.StackTrace}";
            
            // 记录详细错误信息到日志文件或事件查看器（如果需要）
            // 这里可以添加日志记录逻辑
            
            MessageBox.Show(errorMessage, "未处理的异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        /// <summary>
        /// 检查系统要求：Windows 10/11 和 .NET 8.0 运行时
        /// </summary>
        /// <returns>是否满足系统要求</returns>
        static bool CheckSystemRequirements()
        {
            // 检查操作系统版本
            var osVersion = Environment.OSVersion;
            var osPlatform = Environment.OSVersion.Platform;
            
            // 确保是Windows平台
            if (osPlatform != PlatformID.Win32NT)
            {
                MessageBox.Show("本程序仅支持Windows操作系统。", 
                    "系统不兼容", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            // 检查Windows版本（需要Windows 10或更高版本）
            var version = osVersion.Version;
            if (version.Major < 10)
            {
                MessageBox.Show("本程序需要Windows 10或更高版本。\n\n" +
                              "当前系统版本: " + osVersion.VersionString + "\n" +
                              "请升级到Windows 10或Windows 11。", 
                    "系统版本过低", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            // 检查.NET运行时版本
            try
            {
                // 获取当前运行的.NET版本
                var netVersion = Environment.Version;
                
                // .NET 8.0 版本号为 8.0.x
                if (netVersion.Major < 8)
                {
                    var result = MessageBox.Show("本程序需要.NET 8.0运行时。\n\n" +
                                               "当前.NET版本: " + netVersion + "\n" +
                                               "是否打开.NET 8.0下载页面？", 
                        "缺少.NET运行时", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    
                    if (result == DialogResult.Yes)
                    {
                        // 打开.NET 8.0下载页面
                        System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
                        {
                            FileName = "https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0",
                            UseShellExecute = true
                        });
                    }
                    return false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("无法检测.NET运行时版本: " + ex.Message + "\n\n" +
                              "请确保已安装.NET 8.0运行时。", 
                    "运行时检测失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            // 显示系统信息（可选，用于调试）
            Console.WriteLine($"系统检测通过: Windows {version.Major}.{version.Minor}, .NET {Environment.Version}");
            
            return true;
        }
    }
}